#include <stdio.h>

void main(void)
{
    // volatile
    // volatile说明符表示所声明的变量，可能会预想不到地发生变化（即其他程序可能会更改它的值），不受当前程序控制，
    // 因此编译器不要对这类变量进行优化，每次使用时都应该查询一下它的值。硬件设备的编程中，这个说明符很常用。

    volatile int foo;
    volatile int *bar;
    // volatile的目的是阻止编译器对变量行为进行优化，请看下面的例子。

    // int foo = x;
    // 其他语句，假设没有改变 x 的值
    // int bar = x;
    // 上面代码中，由于变量foo和bar都等于x，
    // 而且x的值也没有发生变化，所以编译器可能会把x放入缓存，直接从缓存读取值（而不是从 x 的原始内存位置读取），
    // 然后对foo和bar进行赋值。如果x被设定为volatile，编译器就不会把它放入缓存，每次都从原始位置去取x的值，
    // 因为在两次读取之间，其他程序可能会改变x。
}